Search CTRL + K

Nginx proxy manager

Nginx 的工作流程

Workflow

  1. 用户通过域名发出访问Web服务器的请求,该域名被DNS服务器解析为反向代理服务器的IP地址;
  2. 反向代理服务器接受用户的请求;
  3. 反向代理服务器在本地缓存中查找请求的内容,找到后直接把内容发送给用户;
  4. 如果本地缓存里没有用户所请求的信息内容,反向代理服务器会代替用户向源服务器请求同样的信息内容,并把信息内容发给用户,如果信息内容是缓存的还会把它保存到缓存中。

实际上 Nginx 作为一个代理服务器,本质上就是处理网络请求。或者说做的是负载均衡, 而最为实用的在我们的网站建设中实际上用的是nginx 的反向代理功能

Nginx Proxy

Tips

Nginx在做反向代理时,提供性能稳定,并且能够提供配置灵活的转发功能。Nginx可以根据不同的正则匹配,采取不同的转发策略,比如图片文件结尾的走文件服务器,动态页面走web服务器,只要你正则写的没问题,又有相对应的服务器解决方案,你就可以随心所欲的玩。并且Nginx对返回结果进行错误页跳转,异常判断等。如果被分发的服务器存在异常,他可以将请求重新转发给另外一台服务器,然后自动去除异常服务器。 ^20f1be

Nginx Proxy Manager 的安装

配置Nginx过于麻烦,现在通过 Nginx Proxy Manager 配置管理则会方便多了.

Introduction

nginx Proxy Manager是一个开源的nginx反向代理管理器,可以轻松地配置和管理多个虚拟主机、SSL证书和反向代理规则。它提供了用户友好的Web界面,使得即使没有经验的管理员也可以方便地进行配置和管理。使用nginx Proxy Manager可以轻松地搭建自己的Web服务器,实现多个应用程序共享同一个IP地址和端口号。同时,它还支持与Let's Encrypt配合使用自动化SSL证书签发与更新,从而保障了数据传输的安全性。

Features

  • 基于Tabler的美观安全的管理界面
  • 在对 nginx 一无所知的情况下轻松创建转发域、重定向、流和 404 主机
  • 使用 Let's Encrypt 的免费 SSL 或提供您自己的自定义 SSL 证书
  • 主机的访问列表和基本 HTTP 身份验证超级用户可用的高级 nginx 配置
  • 用户管理、权限和审计日志

Installation

  1. Install Docker and Docker-Compose
  2. Create a Docker-compose.yml file similar to this:
version: '3.8'
services:
	app:
		image: 'jc21/nginx-proxy-manager:latest'
		restart: unless-stopped
		ports:
			- '80:80'
			- '81:81'
			- '443:443'
		volumes:
			- ./data:/data
			- ./letsencrypt:/etc/letsencrypt
  1. Bring up your stack by running
docker-compose up -d
  1. Log in to the Admin UI
http://127.0.0.1:81

实际上 nginx proxy manager 对80 和 443 端口过去将 nginx 的工作交给它去处理, 它实际上是运行在 docker 中的一个服务.

具体的实践

Requirements

  • Cloud server with IP address(Example 125.125.125.125)
  • Hostname (example.com)

安装 docker 和 docker-compsoe

install Docker

安装 nginx proxy manager

mkdir nginx-proxy-manager
cd nginx-proxy-manager
vim docker-compose.yml

主要是持久化存储,将设置都放在 nginx-proxy-manager 文件夹中,便于以后的迁移

version: "3"
services:
  nginx_manager:
    # network_mode: web
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80' # 80 端口 到 80 端口
      - '443:443' # 443 端口到443 端口
      - '81:81' # 81 端口默认的web管理UI 端口,可以映射到任何 example: '2134:81'
    environment:
      DB_MYSQL_HOST: "db"
      DB_MYSQL_PORT: 3306
      DB_MYSQL_USER: "npm"
      DB_MYSQL_PASSWORD: "npm"
      DB_MYSQL_NAME: "npm"
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    depends_on:
      - db
  db:
    # network_mode: web
    image: 'jc21/mariadb-aria:latest'
    restart: unless-stopped
    environment:
      MYSQL_ROOT_PASSWORD: 'npm'
      MYSQL_DATABASE: 'npm'
      MYSQL_USER: 'npm'
      MYSQL_PASSWORD: 'npm'
    volumes:
      - ./data/mysql:/var/lib/mysql

运行

docker-compose up -d

这个时候可以打开portainer 界面,发现已经成功运行两个容器


nginx_proxy_manager_db_1 和 nginx_proxy_manager_nginx_manager_1

至此, 容器构建基本完成

具体使用nginx proxy manager 去构建nginx 服务

这里我主要是构建了Blog 服务和git 服务

可以看到,我构建的服务主要有

Service

  • gogs(git.mingzailao.live)
  • nginx-proxy-manager(heimdall.mingzailao.live,这个二级域名没有用,后来觉得heimdall 首页有点鸡肋,便用来给了管理nginx 服务)
  • wordpress Blog (mingzailao.live, www.mingzalao.live)
  • 在线latex项目构建(overleaf.mingzailao.live, 这个没有放在Cloud server 上面, 使用了frp 服务放在本地,这个过后再讲吧)
  • Docker UI(Portainer, portainer.mingzailao.live)

heimdall.mingzailao.live

  • 注意本地端口的81端口是UI 界面, 我们想要通过 heimdall.mingzailao.live 访问${IP}:81
  • 申请SSL证书
  • 可以直接用自带的Let’s Encrypt
  • Custom SSL Certificate From DNSPod(Tencent Cloud)
  • Add Proxy Host
  • 这里选择刚才申请的证书.
  • Save

现在访问 https://heimdall.mingzailao.live 可以直接访问nginx-proxy-manager 的UI 界面了(也就是 http://$:81)

其余的服务同理

  1. 注意开启腾讯云防火墙端口
  2. 如果需要部署frp, 主要就是将另一台服务器的端口转发 同理将转发过来的端口配置好 Proxy Host 即可.